"""
哈希存储：通常情况下如果能够使用一个优质的哈希函数（哈希码冲突的概率很低），
那么哈希存储的性能将会非常的优异，基本上是常量级时间复杂度实现读写操作。
如果发生了哈希冲突，就需要使用对应的算法解决哈希冲突，Python中的集合使用了
开放地址法的方式来解决哈希冲突。
MySQL支持很多种存储引擎，5.5+版本默认是用InnoDB引擎
~ MyISAM
~ Memory -----> 哈希索引
"""


class Person:

    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __str__(self):
        return f'{self.name}: {self.age}'

    def __hash__(self):
        return hash((self.name.lower(), self.age))

    def __eq__(self, other):
        return self.name.lower() == other.name.lower() and self.age == other.age


def main():
    set1 = {1, 1, 2, 2, 2, 1, 3, 3, 3, 5}
    print(set1)
    set2 = {
        Person('WangDachui', 20), Person('WangDachui', 18),
        Person('WangDachui', 20), Person('WANGDachui', 20)
    }
    print(len(set2))
    for person in set2:
        print(id(person))
        print(person)


if __name__ == '__main__':
    main()
